﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Kaidou.Model
{
    public class Report
    {
        private TrnReporth report_h = null;
	    private TrnReportd[] report_d = null;
	    private string[] seal_str_no = null;
	    private string[] seal_end_no = null;

	    /**
	     * 本クラスのデフォルトコンストラクタで、初期化を行います。
	     */
	    public Report() {
		    report_h = null;
		    report_d = new TrnReportd[5];
		    for (int i = 0; i < 5; i++) {
			    report_d[i] = null;
		    }
		    seal_str_no = new string[5];
		    for (int i = 0; i < 5; i++) {
			    seal_str_no[i] = null;
		    }
		    seal_end_no = new String[5];
		    for (int i = 0; i < 5; i++) {
			    seal_end_no[i] = null;
		    }

	    }

	    /**
	     * TrnReporthをセットします。
	     *
	     * @param  TrnReporth
	    */
	    public void setReportH(TrnReporth report_h) {
		    this.report_h = report_h;
	    }

	    /**
	     * TrnReporth を取得します。
	     *
	     * @return (TrnReporth) TrnReporth
	    */
	    public TrnReporth getReportH() {
		    return report_h;
	    }

	    /**
	     * TrnReportd[]をセットします。
	     *
	     * @param TrnReportd[]
	    */
	    public void setReportD(TrnReportd[] report_d) {
		    this.report_d = report_d;
	    }

	    /**
	     * TrnReportd[] を取得します。
	     *
	     * @return TrnReportd[] 
	    */
	    public TrnReportd[] getReportD() {
		    return report_d;
	    }

	    /**
	     * TrnReportd[]に格納されているTRN_Reort_Dからシール枚数合計を取得します。
	     *
	     * @return int シール合計枚数
	    */
	    public int getSealCount() {

		    int str = 0;
		    int end = 0;
		    int count = 0;

		    for (int i = 0; i < 5; i++) {
			    if (report_d[i] == null)
				    continue;
			    if (isEmpty(report_d[i].SealStrNo))
				    continue;
			    str = 0;
			    end = 0;
                try
                {
                    str = int.Parse(report_d[i].SealStrNo);
                }
                catch (Exception e)
                {
                }
                try
                {
                    end = int.Parse(report_d[i].SealEndNo);
                }
                catch (Exception e)
                {
                }
                
				
				// 確認シール番号(開始)と確認シール番号(終了)が全部ない場合
				if (str == 0 && end == 0)
				    continue;
                // 確認シール番号(開始)だけある場合
				if (str != 0 && end == 0) {
				    count++;
					continue;
				}
                // シール番号の大小関係が正しくない場合
				if (str > end)
				   continue;
                // 合計
				count += end - str + 1;
			    
		    }
		    return count;
	    }

	    /**
	    * 確認シールSTART番号を取得する
	    * @return String[] 確認シール番号
	    */
	    public String[] getSeal_str_no() {
		    for (int i = 0; i < 5; i++) {
			    if (report_d[i] == null)
				    continue;
			    if (isEmpty(report_d[i].SealStrNo))
				    continue;
			    seal_str_no[i] = report_d[i].SealStrNo;
		    }
		    return this.seal_str_no;
	    }

	    /**
	    * 確認シールEND番号を取得する
	    * @return String[] 確認シール番号
	    */
	    public String[] getSeal_end_no() {
		    for (int i = 0; i < 5; i++) {
			    if (report_d[i] == null)
				    continue;
			    if (isEmpty(report_d[i].SealEndNo))
				    continue;
                seal_end_no[i] = report_d[i].SealEndNo;
		    }
		    return this.seal_end_no;
	    }


        public bool isEmpty(string text){
            if (text == null) return true;
            return text.Trim().Length == 0;
        }
    }
}
